#include <stdio.h>
#include <stdlib.h>
/*
 * int a[M][N] = {...};
 * int *p = *a;当成一维数组处理
 * int (*q)[N]= a;  行指针
 *
 * ->a[i][j]	*(a+i)+j	a[i]+j		p[i]	*p	q[i][j]		*q	q	p+3	q+2
 *   值		地址+值		地址+值		值	值	值  		值	地址	地址	地址	
 *		行指针 				*(p+i)		*(*(q+i)+j)
 * ->值		值		值		值	值	值		值	指针	指针	指针
 * */


#define M 3
#define N 4

void print_douarr_like_arr(int *p,int n)
{
	int i = 0;
	for(i=0;i<n;i++)
	{
		printf("%d ",*(p+i));
	}
	printf("\n");
}
//void print_douarr(int p[][N],int m ,int n) 同一维数组
void print_douarr(int (*p)[N],int m,int n)
{
	int i=0,j=0;
	printf("[%s]sizeof(p) = %d\n",__FUNCTION__,sizeof(p));
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			//printf("%d ",p[i][j]);
			printf("%d  ",*(*(p+i)+j));
		}
		printf("\n");
	}
	
}
/*
 * 1.统计平均值
 * 2.显示某一列的全部值
 * */
void douarr_exec(int (*p)[N],int m,int n)//行指针
{
	int sum = 0,i = 0,j=0;
	for(i=0;i<m;i++)
	{
		for(j=0;j<N;j++)
		{
			sum +=*(*(p+i)+j);
		}
	}

	printf("sum = %d\n",sum);
	int who = 0;
	for(;;)
	{
		scanf("%d",&who);
		if (who>3 || who <=0)
			printf("输入有误");
			break;
	}
	

	for(j=0;j<n;j++)
	{
		printf("%d ",*(*(p+who-1)+j));
	}
	printf("\n");
}	

int main(void)
{

	int arr[M][N] = {1,2,3,4,5,6,7,8,9,10,11,12};
	print_douarr_like_arr(&arr[0][0],M*N);
	
	printf("[%s]sizeof(arr) = %d\n",__FUNCTION__,sizeof(arr));	
	print_douarr(arr,M,N);
	
	
	douarr_exec(arr,M,N);	
	exit(0);
}
